package com.kpmg.datalake.common.dao;

import java.util.List;
import java.util.Map;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;

/**
 * 通用sql执行对象
 *
 * @author Alex.zhao
 */
public interface ExecuteMapper {
    /**
     * 通用查询接口
     *
     * @param selectSql 查询sql
     * @return 查询结果
     */
    List<Map<String, Object>> queryListByString(@Param("selectSql") String selectSql);

    /**
     * 通用查询接口
     *
     * @param params 查询参数，必须含有查询sql，查询sql的key为selectSql
     * @return 查询结果
     */
    List<Map<String, Object>> queryListByMap(Map<String, Object> params);

  /**
   * 通用查询接口
   *
   * @param selectSql 查询sql
   * @return 查询结果
   */
  List<Map<String, Object>> queryPageByString(RowBounds rowBounds,
      @Param("selectSql") String selectSql);

  /**
   * 通用查询接口
   *
   * @param params 查询参数，必须含有查询sql，查询sql的key为selectSql
   * @return 查询结果
   */
  List<Map<String, Object>> queryPageByMap(RowBounds rowBounds, Map<String, Object> params);

    /**
     * 通过新增接口
     *
     * @param insertSql 新增sql
     * @return 影响行数
     */
    Integer insertByString(@Param("insertSql") String insertSql);

    /**
     * 通过新增接口
     *
     * @param params 查询参数，必须含有更新sql，更新sql的key为insertSql
     * @return 影响行数
     */
    Integer insertByMap(Map<String, Object> params);
    /**
     * 通过更新接口
     *
     * @param updateSql 跟新sql
     * @return 影响行数
     */
    Integer updateByString(@Param("updateSql") String updateSql);

    /**
     * 通过更新接口
     *
     * @param params 查询参数，必须含有更新sql，更新sql的key为updateSql
     * @return 影响行数
     */
    Integer updateByMap(Map<String, Object> params);

    /**
     * 通用删除sql
     *
     * @param deleteSql 删除sql
     * @return 影响行数
     */
    Integer deleteByString(@Param("deleteSql") String deleteSql);

    /**
     * 通用删除sql
     *
     * @param params 查询参数，必须含有删除sql，删除sql的key为deleteSql
     * @return 影响行数
     */
    Integer deleteByMap(Map<String, Object> params);
    /**
     * 执行存储过程
     *
     * @param params 参数
     */
    void callByMap(Map<String, Object> params);

    /**
     * oracle 获取当前用户
     *
     * @return String
     */
    String getCurrentUser();
}
